package com.itheima;

import com.itheima.config.SpringConfig;
import com.itheima.domain.Account;
import com.itheima.service.AccountService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

/*
    TODO 问题: service层需要dao层对象,但是dao层对象没有在IOC容器中,
            需要大家将dao层涉及到的对象放到IOC容器中,然后再去IOC容器中获取

     1. 项目: spring + mybatis (IOC改造)
        1). mybatis使用过程中涉及到的对象
            SqlSessionFactoryBuilder ->  SqlSessionFactory -> SqlSession -> AccountDao(最重要)
        2). IOC改造
            I. 将这些对象都放到IOC容器中
                a. 方案一: 在这些类上加@Component之类的
                    (这里用不了: 前3个是第三方类,没有源码,只有字节码,最后一个是动态代理在运行时产生的)
                b. 方案二: 工厂方式
                    就这个了!!!
            II. 需要的时候,从IOC容器中获取

    2. 项目: spring整合mybatis
        1). 问题: 我们对mybatis的对象进行IOC改造,但是依然冗余,而且mybatis还有xml配置...
        2). mybatis做了一件事 : 按照spring提供的规范,封装了自己
            mybatis涉及到的对象进行简化,去掉xml核心配置文件

        3). spring整合mybatis
            I. 导包
                spring-jdbc
                mybatis-spring
            II. 代码编写
                SpringConfig  + MybatisConfig
 */
public class App {
    public static void main(String[] args) {

        ApplicationContext ctx = new AnnotationConfigApplicationContext(SpringConfig.class);
        /*
            使用如下获取方式，那么就不用在AccountServiceImpl类似上的注解 @Service书写别名了： @Service("accountService")
         */
        AccountService accountService = ctx.getBean(AccountService.class);
        //以前获取bean方式
//        AccountService accountService = (AccountService) ctx.getBean("accountService");
        Account ac = accountService.findById(1);
        System.out.println(ac);
    }
}
